package com.example.nettry.demo.repair;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.LineBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

/**
 * @author Eastern unbeaten
 * @email chenshiyun2011@163.com
 * @date 2019-10-04 15:10
 */
public class TimeClient {

    public static void main(String[] args) throws Exception {
        int port = 8080;
        if (args != null && args.length > 0) {
            try {
                port = Integer.valueOf (args[0]);
            } catch (NumberFormatException e) {
                // 采用默认值
            }
        }
        new TimeClient ( ).connect (port, "127.0.0.1");
    }

    public void connect(int port, String host) {
        //配置客户端nio线程组
        EventLoopGroup group = new NioEventLoopGroup ( );

        try {
            Bootstrap b = new Bootstrap ( );
            b.group (group).channel (NioSocketChannel.class).option (ChannelOption.TCP_NODELAY, true).handler (new ChannelInitializer<SocketChannel> ( ) {
                @Override
                protected void initChannel(SocketChannel ch) throws Exception {
                    ch.pipeline ( ).addLast (new LineBasedFrameDecoder (1024));
                    ch.pipeline ( ).addLast (new StringDecoder ( ));
                    ch.pipeline ( ).addLast (new TimeClientHandler ( ));
                }
            });
            //发起异步链接操作
            ChannelFuture f = b.connect (host, port).sync ( );
            //等待客户端链接关闭
            f.channel ( ).closeFuture ( ).sync ( );
        } catch (InterruptedException e) {
            e.printStackTrace ( );
        } finally {
            //释放
            group.shutdownGracefully ( );
        }
    }
}
